Package: PathwaySpace 1.0.3.1
This tutorial creates a large PathwaySpace object with
n = 12990 vertices, upon which we will project binary
signals representing feature sets from a relatively small number of
vertices. The goal is to enhance clarity and make it less likely for
viewers to miss important details of large graphs when only a limited
number of features carry relevant information. The projections will
emphasize clusters of vertices forming summits, and we will add
silhouettes as decorative elements to outline the overall graph
structure. The examples in this section are adapted from Ellrott et al. (2025) and Tercan et al. (2025).
We will start by loading an igraph object containing gene interaction data available from the Pathway Commons database (version 12) (Rodchenkov et al. 2019).
# Check required packages for this vignette
if (!require("remotes", quietly = TRUE)){
install.packages("remotes")
}
if (!require("RGraphSpace", quietly = TRUE)){
remotes::install_github("sysbiolab/RGraphSpace")
}
if (!require("PathwaySpace", quietly = TRUE)){
remotes::install_github("sysbiolab/PathwaySpace")
}
# Check versions
if (packageVersion("RGraphSpace") < "1.1.0"){
message("Need to update 'RGraphSpace' for this vignette")
remotes::install_github("sysbiolab/RGraphSpace")
}
if (packageVersion("PathwaySpace") < "1.0.3.1"){
message("Need to update 'PathwaySpace' for this vignette")
remotes::install_github("sysbiolab/PathwaySpace")
}
# Load packages
library(PathwaySpace)
library(RGraphSpace)
library(igraph)
library(ggplot2)
# Load a large igraph object
data("PCv12_pruned_igraph", package = "PathwaySpace")
# Check number of vertices
length(PCv12_pruned_igraph)
# [1] 12990
# Check vertex names
head(V(PCv12_pruned_igraph)$name)
# [1] "A1BG" "AKT1" "CRISP3" "GRB2" "PIK3CA" "PIK3R1"
# Get top-connected nodes for visualization
top10hubs <- igraph::degree(PCv12_pruned_igraph)
top10hubs <- names(sort(top10hubs, decreasing = TRUE)[1:10])
head(top10hubs)
# [1] "GNB1" "TRIM28" "RPS27A" "CTNNB1" "TP53" "ACTB"
## Check graph validity
g_space_PCv12 <- GraphSpace(PCv12_pruned_igraph, mar = 0.1)
## Visualize the graph layout labeled with 'top10hubs' nodes
plotGraphSpace(g_space_PCv12, node.labels = top10hubs, label.color = "blue", theme = "th3")

We now load gene sets from the MSigDB collection (Liberzon et al. 2015), which are subsequently used to project a binary signal onto the PathwaySpace image.
# Load a list with Hallmark gene sets
data("Hallmarks_v2023_1_Hs_symbols", package = "PathwaySpace")
# There are 50 gene sets in "hallmarks"
length(hallmarks)
# [1] 50
# We will use the 'HALLMARK_P53_PATHWAY' (n=200 genes) for demonstration
length(hallmarks$HALLMARK_P53_PATHWAY)
# [1] 200
We now follow the PathwaySpace pipeline as explained in the
introductory vignette, that is,
using the buildPathwaySpace() constructor to initialize a
new PathwaySpace object with the Pathway Commons
interactions.
# Run the PathwaySpace constructor
p_space_PCv12 <- buildPathwaySpace(gs=g_space_PCv12, nrc=500)
# Note: 'nrc' sets the number of rows and columns of the
# image space, which will affect the image resolution (in pixels)
…and mark the HALLMARK_P53_PATHWAY genes in the PathwaySpace object.
# Intersect Hallmark genes with the PathwaySpace
hallmarks <- lapply(hallmarks, intersect, y = names(p_space_PCv12) )
# After intersection, the 'HALLMARK_P53_PATHWAY' dropped to n=173 genes
length(hallmarks$HALLMARK_P53_PATHWAY)
# [1] 173
# Set a binary signal (1s) to 'HALLMARK_P53_PATHWAY' genes
vertexSignal(p_space_PCv12) <- 0
vertexSignal(p_space_PCv12)[ hallmarks$HALLMARK_P53_PATHWAY ] <- 1
…and run the circularProjection() function.
# Run signal projection
p_space_PCv12 <- circularProjection(p_space_PCv12)
Next, we decorate the PathwaySpace image with graph silhouettes and plot the results.
# Add silhouettes
p_space_PCv12 <- silhouetteMapping(p_space_PCv12)
# Plot the results
plotPathwaySpace(p_space_PCv12, title="HALLMARK_P53_PATHWAY", marks = top10hubs, mark.size = 2, theme = "th3")

The summits represent regions within the graph that exhibit signal
values that are notably higher than the baseline level. These regions
may be of interest for downstream analyses. One potential downstream
analysis is to determine which vertices projected the original input
signal. This could provide insights into communities within these summit
regions. One may also wish to explore other vertices within the summits,
by querying associations with the original input gene set. In order to
extract vertices within summits, next we use the
summitMapping() function, which also decorates summits with
contour lines.
# Mapping summits
p_space_PCv12 <- summitMapping(p_space_PCv12, minsize = 50)
plotPathwaySpace(p_space_PCv12, title="Summit regions", theme = "th3")

# Extracting summits from a PathwaySpace
summits <- getPathwaySpace(p_space_PCv12, "summits")
class(summits)
# [1] "list"
If you use PathwaySpace, please cite:
Tercan & Apolonio et al. Protocol for assessing distances in pathway space for classifier feature sets from machine learning methods. STAR Protocols 6(2):103681, 2025. https://doi.org/10.1016/j.xpro.2025.103681
Ellrott et al. Classification of non-TCGA cancer samples to TCGA molecular subtypes using compact feature sets. Cancer Cell 43(2):195-212.e11, 2025. https://doi.org/10.1016/j.ccell.2024.12.002
## R version 4.5.1 (2025-06-13)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.3 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## time zone: America/Sao_Paulo
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] patchwork_1.3.2 igraph_2.2.0 SpotSpace_0.0.2
## [4] PathwaySpace_1.0.3.1 RGraphSpace_1.1.0 ggplot2_4.0.0.9000
## [7] remotes_2.5.0 bs4cards_0.1.1
##
## loaded via a namespace (and not attached):
## [1] deldir_2.0-4 pbapply_1.7-4 gridExtra_2.3
## [4] rlang_1.1.6 magrittr_2.0.4 RcppAnnoy_0.0.22
## [7] spatstat.geom_3.6-0 matrixStats_1.5.0 ggridges_0.5.7
## [10] compiler_4.5.1 png_0.1-8 vctrs_0.6.5
## [13] reshape2_1.4.4 stringr_1.5.2 pkgconfig_2.0.3
## [16] fastmap_1.2.0 fontawesome_0.5.3 promises_1.3.3
## [19] rmarkdown_2.30 purrr_1.1.0 xfun_0.53
## [22] cachem_1.1.0 jsonlite_2.0.0 goftest_1.2-3
## [25] later_1.4.4 spatstat.utils_3.2-0 irlba_2.3.5.1
## [28] parallel_4.5.1 cluster_2.1.8.1 R6_2.6.1
## [31] ica_1.0-3 spatstat.data_3.1-8 stringi_1.8.7
## [34] bslib_0.9.0 RColorBrewer_1.1-3 reticulate_1.43.0
## [37] spatstat.univar_3.1-4 parallelly_1.45.1 lmtest_0.9-40
## [40] jquerylib_0.1.4 scattermore_1.2 Rcpp_1.1.0
## [43] knitr_1.50 tensor_1.5.1 future.apply_1.20.0
## [46] zoo_1.8-14 sctransform_0.4.2 httpuv_1.6.16
## [49] Matrix_1.7-4 splines_4.5.1 tidyselect_1.2.1
## [52] abind_1.4-8 rstudioapi_0.17.1 yaml_2.3.10
## [55] spatstat.random_3.4-2 spatstat.explore_3.5-3 codetools_0.2-20
## [58] miniUI_0.1.2 listenv_0.9.1 lattice_0.22-5
## [61] tibble_3.3.0 plyr_1.8.9 shiny_1.11.1
## [64] withr_3.0.2 S7_0.2.0 ROCR_1.0-11
## [67] evaluate_1.0.5 Rtsne_0.17 future_1.67.0
## [70] fastDummies_1.7.5 survival_3.8-3 polyclip_1.10-7
## [73] fitdistrplus_1.2-4 pillar_1.11.1 Seurat_5.3.1.9999
## [76] KernSmooth_2.23-26 plotly_4.11.0 generics_0.1.4
## [79] RcppHNSW_0.6.0 sp_2.2-0 scales_1.4.0
## [82] globals_0.18.0 xtable_1.8-4 glue_1.8.0
## [85] lazyeval_0.2.2 tools_4.5.1 data.table_1.17.8
## [88] RSpectra_0.16-2 RANN_2.6.2 fs_1.6.6
## [91] dotCall64_1.2 cowplot_1.2.0 grid_4.5.1
## [94] tidyr_1.3.1 nlme_3.1-168 cli_3.6.5
## [97] spatstat.sparse_3.1-0 spam_2.11-1 viridisLite_0.4.2
## [100] dplyr_1.1.4 uwot_0.2.3 gtable_0.3.6
## [103] sass_0.4.10 digest_0.6.37 progressr_0.17.0
## [106] ggrepel_0.9.6 htmlwidgets_1.6.4 SeuratObject_5.2.0
## [109] farver_2.1.2 htmltools_0.5.8.1 lifecycle_1.0.4
## [112] httr_1.4.7 mime_0.13 MASS_7.3-65